#!/bin/bash

# 监控间隔（秒）
INTERVAL=10

# 输出文件
OUTPUT_FILE="memory_metrics.log"

# 清空输出文件
> $OUTPUT_FILE

echo "开始内存监控..."
echo "数据将保存到: $OUTPUT_FILE"

while true; do
    # 获取时间戳
    TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
    
    # 获取进程ID
    PID=$(pgrep goserver)
    
    if [ -z "$PID" ]; then
        echo "未找到goserver进程"
        exit 1
    fi
    
    # 获取内存使用情况
    RSS=$(ps -o rss= -p $PID)
    VSZ=$(ps -o vsz= -p $PID)
    
    # 获取goroutine数量（需要通过pprof）
    GOROUTINES=$(curl -s http://localhost:8080/debug/pprof/goroutine?debug=1 | grep 'goroutine profile' | awk '{print $3}')
    
    # 获取GC统计信息（需要通过pprof）
    GC_STATS=$(curl -s http://localhost:8080/debug/pprof/heap?debug=1 | grep 'NextGC')
    
    # 写入日志
    echo "$TIMESTAMP RSS:${RSS}KB VSZ:${VSZ}KB Goroutines:$GOROUTINES GC:$GC_STATS" >> $OUTPUT_FILE
    
    sleep $INTERVAL
done 